Builder模式用大白话讲就是:我有一个东西构造起来很复杂,那我就定义一个工厂类,专门负责构建这个复杂对象。
用一个专门的工厂类来负责构建某类对象,意义有两个:
比如下面的例子,Builder<T>
泛型接口很简单,只定义了一个能返回泛型类型参数T
型的对象引用。
interface Builder<T> {
public T build();
}
然后下面的代码,在不可变的ImmutableClass
类的内部套嵌着一个可变的配套工厂类ImmuBuilder
。
final class ImmutableClass {
private final int a;
private final int b;
private final int c;
private final int d;
private final int e;
private ImmutableClass(ImmuBuilder b){
a = b.a;
b = b.b;
c = b.c;
d = b.d;
e = b.e;
}
static final class ImmuBuilder implements Builder<ImmutableClass> {
private final int a;
private final int b;
private final int c;
private final int d;
private final int e;
public int setA(int num) { a = num; }
public int setB(int num) { b = num; }
public int setC(int num) { c = num; }
public int setD(int num) { d = num; }
public int setE(int num) { e = num; }
public ImmutableClass build() {
return new ImmutableClass(this);
}
}
}